package com.stsdai.portal.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.stsdai.manager.pojo.User;
import com.stsdai.portal.util.CookieUtils;
import com.stsdai.sso.service.UserService;

public class OrderInterceptor implements HandlerInterceptor {

	@Autowired
	private UserService userService;
	
	/**
	 * 在什么情况下运行的?应该用场景是什么?
	 * preHandle ： 是在进入Controller方法之前被拦截；
	 * 应用场景： 校验用户是否登录，校验用户权限；
	 * 返回值类型：Boolean类型：
	 * true ： 放行；
	 * false：被拦截！
	 */
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		//怎么校验用户是否登录
		//从Cookie中获取用户信息
		String ticket = CookieUtils.getCookieValue(request, "STSD_TICKET", true);
		
		if(StringUtils.isBlank(ticket)){
			
			//在重定向页面之前获取被拦截的URL，然后重定向到页面的时候把被拦截的URL传递过去
			String URL = request.getRequestURL().toString();
			//被拦截，重定向到登录页面
			response.sendRedirect("/page/login.html?redirectURL=" + URL);
			//返回false；
			return false;
		}
		//通过Ticket来获取用户信息
		User user = this.userService.queryUserByTicket(ticket);
		if(user == null){
			//如果没有用户信息，就被拦截，跳到登录页面
			//被拦截，重定向到登录页面
			response.sendRedirect("/page/login.html");
			//返回false；
			return false;
			
		}
		//如果有用户信息，那就说明登录了！
		request.setAttribute("user", user);
		
		return true;
	}

	/**
	 * postHandle ： 第二个方法，在进入Controller之后返回视图解析器之前运行！
	 * 应用场景在哪： 获取页面的公共信息，封装所有页面中公共的显示数据信息：比如：天气预报，日历！
	 */
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub

	}

	/**
	 * afterCompletion ： 第三个方法，在返回视图解析器之后执行的！
	 * 应用场景： 在于记录用户日志，保存用户行为信息，为后期大数据分析用的额！
	 */
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub

	}

}
